﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MDT.LifeSewagePlatform.Conmmon
{
    public static class WordTemplate
    {

        public static string CityName { get; set; }
        public static string GetWorldTitile()
        {
           
                if (CityName.Contains("市"))
                {
                    return $"{CityName}城市生活污水毒情监测项目";
                }
                return $"{CityName}市城市生活污水毒情监测项目";
        }
        /// <summary>
        /// 评估报告
        /// </summary>
        /// <returns></returns>
        public static string GetPingGuBaoGao()
        {
            return "评估报告";
        }
        /// <summary>
        ///2020 1季度
        /// </summary>
        /// <param name="strs"></param>
        /// <returns></returns>
        public static string GetQuarter(string[] strs)
        {
            if (strs.Length >= 2)
            {
                return $"{strs[0]}年第{strs[1]}季度";
            }
            return "";
        }

        public static string GetDate(string[] strs)
        {
            if (strs.Length >= 3)
            {
                return $"{strs[0]}年{strs[1]}月{strs[2]}日";
            }
            return "";
        }
        /// <summary>
        /// 杭州锐德生命科技有限公司
        /// </summary>
        /// <param name="strs"></param>
        /// <returns></returns>
        public static string GetComponyName()
        {
            return $"杭州锐德生命科技有限公司";
        }

        /// <summary>
        ///  市城市生活污水毒情监测项目评估报告
        /// </summary>
        /// <param name="strs"></param>
        /// <returns></returns>
        public static string Get001()
        {

            return $"{CityName}城市生活污水毒情监测分析报告";
        }
        /// <summary>
        /// 项目执行情况
        /// </summary>
        /// <returns></returns>
        public static string Get002()
        {
            StringBuilder StrBuiler = new StringBuilder("一、项目执行情况");
            return StrBuiler.ToString();
        }


        public static string Get003()
        {


            StringBuilder sb = new StringBuilder("毒品被吸食入人体后，经人体代谢随排泄物排泄至生活污水中" +
                "，生活污水经污水管道汇入污水处理厂，通过采集污水处理厂生活污水并" +
                "对污水中各毒品及代谢物进行分析，可得到污水厂污水中各毒品及代谢物浓度" +
                "，通过污水厂污水中各毒品及代谢物浓度便可污水处理厂服务区域内的毒品滥用情况进行客观的评价。");
            return sb.ToString();
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="strs"></param>
        /// <returns></returns>
        public static string Get004(string CompanyName="")
        {
            
                StringBuilder sb = new StringBuilder($"为全面掌握我市各毒品滥用情况，" +
                               "确定我市各毒品滥用源头，同时评估我市各毒品制毒风险，" +
                               $"我单位在{CompanyName}的指导和配合下，于2021年8月10日至年8月14日对全市范围内5个污水厂、" +
                               $"1个污水处理泵站和12个重点场所进行了污水采样。按照{CityName}要求，对各县（区）分别采集一个污水厂作为本县" +
                               "（区）的代表监测点，各县（区）污水厂见下表：");
                return sb.ToString();


        }
        /// <summary>
        /// 第一个图表上面的文字
        /// </summary>
        /// <returns></returns>
        public static string Get005()
        {
            StringBuilder sb = new StringBuilder("表1 各县（区）监测点");
            return sb.ToString();
        }

        public static string Get006()
        {
            StringBuilder sb = new StringBuilder("污水采样（污水处理厂）使用污水自动取样机自动取样，" +
                "每天取样24小时，每2小时取样1次，每次取样50mL，每天共取样600mL。取样完成后，" +
                "将当日12次取样污水样品混匀后即得当日污水样品。取样完成后将污水样品于-20℃条件下冷冻，" +
                "并通过冷链运输方式运送至我单位污水检测实验室进行检测。由于重点场所（井口）污水流量不稳定，" +
                "无法使用污水自动采样机进行采样，故重点场所取样为人工取样，人工取样采集样品为瞬时样品；" +
                "虽然瞬时污水样品中各毒品浓度具有较高的偶然性，但也可以从一定程度上反应某重点场所的毒品滥用水平，从而说明污水厂污水中毒品来源情况。");
            return sb.ToString();
        }

        public static string Get007()
        {
            StringBuilder sb = new StringBuilder("我单位污水实验室接收到污水样品后，对污水样品进行唯一编号后，对" +
                "污水中甲基苯丙胺（冰毒）、苯丙胺（冰毒人体代谢产物）、氯胺酮（K粉）、" +
                "去甲氯胺酮（氯胺酮人体代谢产物）；吗啡（海洛因代谢产物）、O6-单乙酰吗啡（海洛因代谢产物）、" +
                "MDMA（3,4亚甲基二氧甲基苯丙胺，摇头丸）、MDA（3,4-亚甲基二氧苯丙胺，摇头丸人体代谢产物）" +
                "、甲卡西酮（丧尸药）、可卡因、苯甲酰爱康宁（可卡因人体代谢产物）、可待因、氟胺酮（氯胺酮替代物，" +
                "于2021年7月1日正式列管）、PMMA（4-甲氧基甲基苯丙胺）及可替宁（污水中生物标志物）进行检测。");
            return sb.ToString();
        }
        public static string Get008(string name = "")
        {
            StringBuilder sb = new StringBuilder("根据污水中各毒品及毒品代谢物浓度及污水处理" +
                "厂日进水流量、服务人口数，计算得出污水厂服务区域内各毒品千人均消耗量，" +
                $"并通过各毒品千人均消耗量对{name}各毒品滥用情况进行评估。");
            return sb.ToString();
        }


        public static string Get009()
        {
            return $"三、{CityName}毒情总体情况";
        }

        public static string Get0010()
        {
            return "1、本次监测中，****污水处理厂检出存在滥用的毒品为甲基苯丙胺和海洛因，" +
                "我****未出现氯胺酮、摇头丸和可卡因滥用。海洛因滥用水平相对较高。";
        }

        public static string Get0011()
        {
            return "2、污水中检出的其他滥用物质或毒品代谢物为可待因。";
        }
        /// <summary>
        /// up--
        /// </summary>
        /// <param name="name"></param>
        /// <param name="pies"></param>
        /// <param name="avg"></param>
        /// <returns></returns>
        public static string Get0012(List<PieView> pies, double avg)
        {
            StringBuilder sb = new StringBuilder($"3、本次监测中，我{CityName}各毒品平均折算总量为{avg.SaveNumberPoint()}；");

            for (int i = 0; i < pies.Count; i++)
            {
                if (i == 0)
                {
                    sb.Append($"{pies[i].Name}折算总量最高，约为全市平均值的{avg.GetDivisionStr(pies[i].Value)}倍；");
                }
                else
                {
                    if (pies[i].Value > 0)
                    {
                        sb.Append($"{pies[i].Name}第{(i + 1).MapMaxNumber()}，约为全市平均值的{avg.GetDivisionStr(pies[i].Value)}倍；");
                    }
                    else
                    {
                        sb.Append($"{pies[i].Name}污水厂未检出任何毒品的滥用。");
                    }

                }
            }
            return sb.ToString();
        }

        public static string Get0013(List<PieView> pies)
        {
            StringBuilder Bstr = new StringBuilder("我市各区县折算总量排名如下：");
            for (int i = 0; i < pies.Count; i++)
            {
                Bstr.Append(pies[i].Name + ">");
            }
            Bstr.Remove(Bstr.Length - 1, 1);
            return Bstr.ToString();
        }

        public static string Get0014()
        {
            return $"五、{CityName}常规毒品滥用占比情况";
        }

        public static string Get0015(string[] strs)
        {
            if (strs.Length < 2)
            {
                return "";
            }
            return $"5.{strs[0]} {strs[1]}";
        }

        public static string Get0016(string[] strs)
        {
            if (strs.Length < 2)
            {
                return "";
            }
            return $"图{strs[0]} {strs[1]}常规毒品滥用组成";
        }

        public static string Get0017<T>(T data, string AreaName = null) where T : DrugDetailReprot
        {
            StringBuilder sb = new StringBuilder("本次监测中，");
            if (data == null)
            {
                return "";
            }
            bool IsCity = true;

            if (AreaName == null)
            {
                sb.Append("我市");
            }
            else
            {
                IsCity = false;
                sb.Append(AreaName);
            }
            Type type = typeof(T);
            double sum = 0.0;
            List<PieView> pies = new List<PieView>();
            foreach (var item in type.GetProperties())
            {
                string Name = item.GetColName();
                if (item.PropertyType == typeof(double) && Name.Contains("（"))
                {
                    PieView pie = new PieView();
                    double.TryParse(item.GetValue(data).ToString(), out double res);
                    pie.Value = Math.Round(res, 2);
                    if (pie.Value > 0 || IsCity == false)
                    {
                        pie.Name = Name.Substring(0, Name.IndexOf("（"));
                        pies.Add(pie);
                        sum += res;
                    }
                }
            }
            foreach (var item in pies.OrderByDescending(t => t.Value))
            {
                if (IsCity)
                {
                    sb.Append($"{item.Name}滥用占全市常规毒品滥用的{item.Value.GetPercentBySun(sum)}%；");
                }
                else
                {
                    if (item.Value > 0)
                    {
                        sb.Append($"{item.Name}滥用占{item.Value.GetPercentBySun(sum)}%；");
                    }
                    else
                    {
                        if (sb.ToString().Contains("未出现"))
                        {
                            sb.Append($"{item.Name},");
                        }
                        else
                        {
                            sb.Append($"{data.AreaName}未出现{item.Name}滥用,");
                        }

                    }

                }
            }

            return sb.ToString().Remove(sb.Length - 1, 1) + "。";
        }
        public static string Get0018()
        {
            return $"四、{CityName}各毒品消耗量及折算总量分析";
        }
        //表2 ****各毒品消耗量及折算总量表

        public static string Get0019()
        {
            return $"表2 {CityName}各毒品消耗量及折算总量表";
        }

        public static string Get0020(string[] strs)
        {
            if (strs.Length < 2)
            {
                return "";
            }
            return $"4.{strs[0]} {strs[1]}";
        }

        public static string Get0021(List<PieView> pies, double cityavg)
        {
            StringBuilder sb = new StringBuilder($"本次监测中，我市平均折算总量为{cityavg.SaveNumberPoint()}毫克/天/千人；");

            for (int i = 0; i < pies.Count; i++)
            {
                if (i == 0)
                {
                    sb.Append($"{pies[i].Name}折算总量最高为{pies[i].Value.SaveNumberPoint()}毫克/天/千人；");
                }
                else
                {
                    if (pies[i].Value > 0)
                    {
                        sb.Append($"第{(i + 1).MapMaxNumber()}为{pies[i].Name}折算总量为{pies[i].Value.SaveNumberPoint()}毫克/天/千人;");
                    }
                    if (pies[i].Value == 0)
                    {
                        sb.Append($"{pies[i].Name},");
                    }

                }
            }
            if (pies.Where(t => t.Value == 0).Any())
            {
                return sb.ToString().Substring(0, sb.Length - 1) + "未检出任何毒品滥用。";
            }
            return sb.ToString();
        }
        /// <summary>
        /// up ---
        /// </summary>
        /// <param name="pies"></param>
        /// <param name="cityavg"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public static string Get0024(List<PieView> pies, double cityavg, string name)
        {
            StringBuilder sb = new StringBuilder($"本次监测中，我市{name}平均消耗量为{cityavg.SaveNumberPoint()}毫克/天/千人；");

            for (int i = 0; i < pies.Count; i++)
            {
                if (i == 0)
                {
                    sb.Append($"{pies[i].Name}{name}平均消耗量最高为{pies[i].Value.SaveNumberPoint()}毫克/天/千人；");
                }
                else
                {
                    if (pies[i].Value > 0)
                    {
                        sb.Append($"第{(i + 1).MapMaxNumber()}为{pies[i].Name},平均消耗量为{pies[i].Value.SaveNumberPoint()}毫克/天/千人;");
                    }
                    if (pies[i].Value == 0)
                    {
                        sb.Append($"{pies[i].Name},");
                    }

                }
            }
            if (pies.Where(t => t.Value == 0).Any())
            {
                return sb.ToString().Substring(0, sb.Length - 1) + $"未检出{name}滥用。";
            }
            return sb.ToString();
        }

        public static string Get0022(int i,string desc="消耗量")
        {
            return $"图{i} {CityName}各毒品折{desc}";
        }

        public static string Get0023(double city, double citypast,int year,int monthorquarter,eGroupGetDateType eGroup, Action<StringBuilder,string,double> act, string name)
        {
            StringBuilder sb = new StringBuilder($"相较于{year}年第{monthorquarter}{GetGroupMonthOrQuarterDesc(eGroup)}，");
            double percent = city.GetPercent(citypast);
            sb.Append($"我市{name}消耗量{WordTemplate.ByNumberUpLow(percent)}{percent.SaveNumberPoint()}%；");


            if (act != null)
            {
                act.Invoke(sb,name,percent);
            }
            return sb.ToString();
        }


        public static string Get0025()
        {
            return $"六、{CityName}各监测点浓度分析";
        }

        public static string Get0026(Action<StringBuilder> act)
        {

            StringBuilder sb = new StringBuilder();
            if (act != null)
            {
                act.Invoke(sb);
            }
            return sb.ToString();

        }

        public static string Get0027(string[] strs)
        {
            if (strs.Length < 2)
            {
                return "";
            }
            return $"6.{strs[0]} {strs[1]}";
        }
        //up 纳克/升
        public static string Get0028(List<PieView> pies, double avg, string name)
        {
            StringBuilder sb = new StringBuilder($"本次监测中，我市各个监测点污水中{name}平均浓度为{avg}纳克/升；");
            int index = 0;
            bool isOK = false;
            foreach (var item in pies.OrderByDescending(t => t.Value))
            {
                if (index == 0)
                {
                    sb.Append($"{item.Name}污水中{name}最高,浓度为{item.Value.SaveNumberPoint()}纳克/升；");
                }
                else
                {
                    if (item.Value >= avg)
                    {
                        sb.Append($"第{(index + 1).MapMaxNumber()}为{item.Name},浓度为{item.Value.SaveNumberPoint()}纳克/升；");
                    }
                    else
                    {
                        isOK = true;
                    }

                }
                index++;
            }
            if (isOK)
            {
                sb.Append($"其他监测点{name}的浓度均低于平均值。");
            }

            return sb.ToString();
        }

        public static string Get0029(int i, string name)
        {
            return $"图{i} 各监测点污水中{name}浓度";
        }

        public static string Get0030()
        {
            return "七、****各毒品日消耗总量分析";
        }

        public static string Get0031()
        {
            return "表3 *****各毒品日消耗总量分析表";
        }

        public static string Get0032()
        {
            return "图13 ***各毒品日消耗总量";
        }

        public static string Get0033()
        {
            return "吗啡：本次监测中，****吗啡日消耗" +
                "总量为0.32克/天；****吗啡日消耗总量为0.04克/天；" +
                "****吗啡日消耗总量为0.03克/天；*****日消耗总量为0.02克/天。";
        }

        public static string Get0034()
        {
            return "甲基苯丙胺：本次监测中，" +
                "****甲基苯丙胺日消耗总量为0.15克/天；" +
                "****甲基苯丙胺日消耗总量为0.07克/天；" +
                "****甲基苯丙胺日消耗总量为0.02克/天；" +
                "*****甲基苯丙胺日消耗总量为0.01克/天。";
        }
        public static string Get0035(string name)
        {
            return $"附表1 {name}各监测点污水中各精神活性物质浓度";
        }
        public static string Get0036()
        {
            return "附表2 检出限及定量限";
        }

        public static string ByNumberUpLow(double number)
        {
            if (number > 0)
            {
                return "上升";
            }

            if (number == 0)
            {
                return "不变";
            }

            if (number <= 0)
            {
                return "下降";
            }
            return "";
        }


        public static string Get0037(){

            return "二、监测毒品及其代谢物简介";
        }

        public static string Get0038()
        {
            return "2.1 冰毒";
        }
        public static string Get0039()
        {
            return "冰毒经人体代谢后主要以甲基苯丙胺和苯丙胺两种形式随尿液排出体外，" +
                "当污水中只检出甲基苯丙胺，而未检出苯丙胺，甲基苯丙胺浓度高于20 纳克/升，则疑似存在毒品倾倒或制毒排污，需要调查原因。"+
                "因为污水中甲基苯丙胺来源较为单一，如不存在制毒风险，则可认为污水中甲基苯丙胺来源于冰毒吸食。";
        }
        public static string Get0040()
        {
            return "2.2 氯胺酮";
        }

        public static string Get0041()
        {
            return "去甲氯胺酮是K粉的主要代谢产物，如果未检出去甲氯胺酮，且污水中氯胺酮浓度高于6纳克/升，" +
                "则疑似存在毒品倾倒或制毒排污，需要调查原因" +
                "。与甲基苯丙胺类似" +
                "，污水中氯胺酮来源亦较为单一，如不存在制毒风险，则可认为污水中氯胺酮来源于K粉吸食。此外，" +
                "氟胺酮作为氯胺酮的替代物，被称为“改良K粉”，目前已造成较大的影响，我国已于2021年7月1日正式对氟胺酮进行列管。";
        }
        public static string Get0042()
        {
            return "2.3 海洛因";
        }
        public static string Get0043()
        {
            return "海洛因经人体代谢后成为吗啡和O6-单乙酰吗啡。" +
                "O6-单乙酰吗啡为海洛因的特征性代谢产物，只能通过海洛因代谢产生，" +
                "如污水中检出O6-单乙酰吗啡，则可认定存在海洛因吸食行为，但污水中O6-单乙酰吗啡易分解，" +
                "较难检出，故在折算海洛因消耗量时，一般使用吗啡浓度；而污水中吗啡来源较广，" +
                "如药物（可待因代谢、吗啡酊、罂粟碱、稀丙吗啡、阿扑吗啡、二醋吗啡、" +
                "氢吗啡酮。可待因片、盐酸可待因片、吗啡酊、罂粟碱" +
                "、稀丙吗啡、阿扑吗啡、二醋吗啡、复方甘草片）故无法说明污水中的吗啡全部来源于海洛因吸食。";
        }

        public static string Get0044()
        {
            return "3.4 摇头丸";
        }
        public static string Get0045()
        {
            return "摇头丸也是一种人工合成的复合型毒品，主要成分为3,4－亚甲基二氧甲基苯丙胺（MDMA）和4,5－亚甲基二氧基苯丙胺（MDA）。";
        }
        public static string Get0046()
        {
            return "3.5 可卡因";
        }

        public static string Get0047()
        {
            return "可卡因（Cocaine），又称古柯碱，化学名称为苯甲基芽子碱。可卡因在污水中分解速度较快，" +
                "仅需要12小时，90%的可卡因就会分解为苯甲酰爱康宁，" +
                "故在污水监测中，对可卡因进行监测的同时，还需要对苯甲酰爱康宁进行监测。";
        }

        public static string Get0048()
        {
            return $"七.{CityName}各毒品日消耗总量分析";
        }


        public static string Get0049()
        {
            return $"表3 {CityName}各毒品日消耗总量分析表";
        }

        public static string Get0050(int index)
        {
            return $"图{index} {CityName}各毒品日消耗总量";
        }
        //up
        public static string Get0051(List<PieView> pies,double avg,string name)
        {
            StringBuilder sb = new StringBuilder();


            //return "吗啡：本次监测中，****吗啡日消耗总量为0.32克/天；" +
            //   "****吗啡日消耗总量为0.04克/天；" +
            //   "****吗啡日消耗总量为0.03克/天；*****日消耗总量为0.02克/天。";
            sb.Append($"{name}：本次监测中，");
            foreach (var item in pies)
            {
                sb.Append($"{item.Name}{name}日消耗总量为{item.Value.SaveNumberPoint()}克/天；");
            }
            sb=sb.Remove(sb.Length-1,1).Append("。");
            return sb.ToString();
        }

        public static string Get0052()
        {
            return "吗啡：本次监测中，****吗啡日消耗总量为0.32克/天；" +
                "****吗啡日消耗总量为0.04克/天；" +
                "****吗啡日消耗总量为0.03克/天；*****日消耗总量为0.02克/天。";
        }

        public static string GetGroupMonthOrQuarterDesc(eGroupGetDateType egroup)
        {
            string desc = string.Empty;
            switch (egroup)
            {
                case eGroupGetDateType.Month:
                    desc = "月";
                    break;
                case eGroupGetDateType.Quarter:
                    desc = "季度";
                    break;
                case eGroupGetDateType.Year:
                    break;
                case eGroupGetDateType.Place:
                    break;
                default:
                    break;
            }
            return desc;
        }

    }
}
